/*
 * ASTCpp.h
 *
 *  Created on: Sep 10, 2012
 *      Author: Hernan
 */

#ifndef ARBOLSINTACTICO_H_
#define ARBOLSINTACTICO_H_
#include <fstream>
#include "string.h"
#include <sstream>
#include <iostream>
#include <stack>
#include "nodo.h"
using namespace std;

class ArbolSintactico {
private:
	string pathYAML;
	Nodo* raiz;
	Nodo* nodoActual;

public:
	ArbolSintactico(Nodo* raiz);
	ArbolSintactico(string fichero);
	ArbolSintactico();

	void setPathArchivo(string path) { this->pathYAML=path;}
	void setNodoActual(Nodo* actual);

	void cargarArbol();
	void cargarArbolRecursivo(stack<Nodo*> pilaNodos,ifstream& archivo);

	Nodo* buscarNodo(string buscado);
	void buscarRecursivo(Nodo* nodo,Nodo*& encontrado, string buscado);

	Nodo* getRaiz();

	void normalizar();
	void normalizarRecursivo(Nodo* nodo, stack<Nodo*> pila);

	int existeShift(stack<Nodo*> pilaNodos, Nodo* nuevoNodo);
	void imprimir();
	virtual ~ArbolSintactico();
};

#endif /* ARBOLSINTACTICO_H_ */
